import axios from 'axios'
import { useUserStore } from '@/stores' //拿获取的token
// import { ElMessage } from 'element-plus/es/components' //导入element中的提示框
import router from '@/router' //导入router，登录失败跳回登录页面
const baseURL = 'http://127.0.0.1:8888'
// const baseURL = 'http://159.138.143.9:9091'

const instance = axios.create({
  baseURL, //基础地址
  timeout: 10000 //超时时间
})

// 请求拦截器
// interceptors.request.use（固定写法）用于拦截http请求方法可以在发送 HTTP 请求之前对其进行拦截，并进行相应的处理
instance.interceptors.request.use(
  (config) => {
    // 获取token
    const useStore = useUserStore()
    // 判断是否有token，如果有将token给请求头
    if (useStore.token) {
      // config.headers.Authorization 用于设置请求头中的授权信息，通常用于发送身份验证凭据
      config.headers.Authorization = useStore.token
    }
    return config
  },
  //   Promise.reject  用于创建一个立即被拒绝的 Promise 对象
  (err) => Promise.reject(err)
)

// 响应拦截器
// interceptors.response.use（固定写法）用于拦截 HTTP 响应的方法 可以在 HTTP 响应被处理之前拦截它们，然后进行相应的处理。
instance.interceptors.response.use(
  // res是后端返回的数据
  (res) => {
    // 如果res中data.code等于0时说明数据没问题，返回数据
    if (res.data.code === 200) {
      return res
    }
    // 处理业务失败，给错误提示，抛出错误
    ElMessage.error(res.data.message || '服务异常')
    return Promise.reject(res.data)
  },
  (err) => {
    // 错误的特殊情况 => 401 权限不足 或 token 过期 => 拦截到登录页面
    if (err.response?.status === 401) {
      router.push('/login')
    }
    // 错误的默认情况
    ElMessage.error(err.response.data.message || '服务异常')
    return Promise.reject(err)
  }
)

export default instance
export { baseURL }
